package com.yaodong.ydshop.adapters;

/**
 * Created
 * Author:lvyaodong[Darksider]
 * Email:1126220529@qq.com
 * Date:2015/10/14
 */

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import com.yaodong.ydshop.R;
import com.yaodong.ydshop.model.CartItem;

import java.util.List;

/**
 * 基本的 购物车 列表适配器
 */
public class CartAdapter extends BaseAdapter {
    private Context context;
    private List<CartItem> items;
    private View.OnClickListener onCountChangeListener;
        /**
     * 当某一个条目checkBox被选中 反生变化时 回调的接口  接口尽量让代码松散
     */
    private CompoundButton.OnCheckedChangeListener itemCheckedListener;


    /**
     * 带表当前ListView 的显示模式 0  普通模式 1 编辑模式
     */
    private int listMode;

    public CartAdapter(Context context, List<CartItem> items) {
        this.context = context;
        this.items = items;
    }

    /**
     * 设置接口 用于条目的选中
     * @param itemCheckedListener
     */
    public void setItemCheckedListener(CompoundButton.OnCheckedChangeListener itemCheckedListener) {
        this.itemCheckedListener = itemCheckedListener;
    }

    /**
     * 调整购买数量
     * @param onCountChangeListener
     */
    public void setOnCountChangeListener(View.OnClickListener onCountChangeListener) {
        this.onCountChangeListener = onCountChangeListener;
    }

    @Override

    public int getCount() {
        int ret = 0;
        if(items!=null) {
            ret = items.size();
        }
        return ret;
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View ret = null;

        //1.视图复用
        if( convertView!=null){
            ret=convertView;
        }else {
            ret = LayoutInflater.from(context).inflate(R.layout.cartitem,parent,false);
        }
        //2.ViewHolder 创建
        ViewHolder holder = (ViewHolder) ret.getTag();
        if (holder == null) {
            holder = new ViewHolder();

            holder.checkBox = (CheckBox) ret.findViewById(R.id.cart_item_checkBox);
            //设置 CheckBox 选中变化的事件 选中之后 改变CartItem 的内容
            //adapter 与 activity 之间的数据
            //!!!!!!!! 核心 adapter传递事件监听器  不创建自己的
            holder.checkBox.setOnCheckedChangeListener(itemCheckedListener);
            //数量-1
            holder.btnDec = ret.findViewById(R.id.cart_item_dec);
            holder.btnDec.setOnClickListener(onCountChangeListener);
            //数量+1
            holder.btnInc = ret.findViewById(R.id.cart_item_inc);
            holder.btnInc.setOnClickListener(onCountChangeListener);

            holder.btnDelete = ret.findViewById(R.id.cart_item_delete);
            holder.imgIcon = (ImageView) ret.findViewById(R.id.cart_item_product_icon);
            holder.txtCount = (TextView) ret.findViewById(R.id.cart_item_count);
            holder.txtProductName = (TextView) ret.findViewById(R.id.cart_item_product_name);
            holder.txtProductPrice = (TextView) ret.findViewById(R.id.cart_item_product_price);

            ret.setTag(holder);
        }

        //3.获取数据
        CartItem cartItem = items.get(position);

        //4.显示数据
        //4.1
        String productName = cartItem.getProductName();
        holder.txtProductName.setText(productName);

        //4.2
        int productCount = cartItem.getCount();

        if(productCount<1){
            holder.btnDec.setEnabled(false);
            holder.btnDec.setBackgroundResource(R.drawable.edit_product_num_des_no_enable);

        }else {
            holder.btnDec.setEnabled(true);
            holder.btnDec.setBackgroundResource(R.drawable.ic_bg_des_selector);
        }
        holder.txtCount.setText(Integer.toString(productCount));
        //4.2.1  设置按钮的Tag用于监听接口返回 当前条目 的位置
        holder.btnInc.setTag(position);
        holder.btnDec.setTag(position);
         //4.3
        float productPrice = cartItem.getProductPrice();
        holder.txtProductPrice.setText(Float.toString(productPrice));




        //4.4显示图片保留
        //4.5根据模式处理checkBox
        //0.设置checkBox的tag
        holder.checkBox.setTag(position);


        if(listMode==1){
            //不论任何状态 ViewHolder 中的所有控件每一次getView的时候 都必须 设置和刷新
            //只要编辑模式 那么CheckBox课件
            //当编辑模式显示的时候 依赖于 cartItem的变量
            boolean isChecked = cartItem.isChecked();
            holder.checkBox.setChecked(isChecked);
            holder.checkBox.setVisibility(View.VISIBLE);
        }else {
            holder.checkBox.setChecked(false);
            //注意当编辑模式时 实体类中的 checked也应该为false
            holder.checkBox.setVisibility(View.INVISIBLE);
        }

        return ret;
    }

    /**
     * 切换内部变量 进行编辑模式的切换
     *
     * ListView 显示内容变回需要 getView方法
     * 那么切换模式的时候 让adapter 进行notifyDataChanged()
     * 强制出发getView（）
     *
     */
    public void switchEditMode(){
        if (listMode == 1){
            listMode =0;
        }else if(listMode == 0){
            listMode = 1;
        }
        notifyDataSetChanged();//必须在主线程执行
    }
    private  static class ViewHolder{
        public CheckBox checkBox;
        public ImageView imgIcon;

        public TextView txtProductName;

        public TextView txtProductPrice;
        //加号
        public  View btnInc;

        //数量
        public TextView txtCount;
        //减号
        public View btnDec;
        //删除
        public View btnDelete;
    }
}
